Linux 电容多点触摸驱动开

🔍 溯源 ✍️ Jason | 📅 2026-08-17 | 👍 0 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/Linux驱动 #技术/Input子系统 #技术/I2C #质量/精华

原帖 | Jason | 2026-08-17 15:41 | 👍0 | 阅读约1

Linux 电容多点触摸驱动开发流程:

1. I2C驱动匹配,进入probe。

2. probe中完成:解析设备树、复位触控IC、申请中断、创建input设备、配置ABS坐标范围、初始化MT slots、注册input设备。触摸IC I2C读写会睡眠,中断要用线程化中断,不能放在硬中断上下文。

3. 中断线程里:I2C读取IC触点数据,按Type‑B协议遍历所有slot上报状态与坐标,最后同步提交事件。

重点 Debug 调试经验干货分享

1. 中断完全不触发:检查设备树引脚配置;RST复位时序,触控IC是否正常初始化;INT引脚电平与中断触发边沿是否匹配;供电是否正常。

2. 中断能进入,但evtest看不到触摸事件
大概率忘记调用同步;没有执行input_mt_init_slots;input设备事件位没有正确设置。

3. 单点正常,多指乱跳、触点不消失、手指漂移:只上报正在触摸的slot,已经抬起的slot没有置为失效,内核保留旧触点状态。Type‑B务必循环遍历全部slot。

4. 坐标XY颠倒、坐标镜像:不是协议问题,是触控IC输出坐标系和屏幕物理方向不一致,驱动层做坐标转换处理。

5. 休眠唤醒之后触摸失效:suspend/resume流程缺失。休眠I2C控制器关闭、中断被关闭,唤醒后没有重新复位初始化触控IC。

6. evtest调试手段:evtest是排MT协议的第一工具(GT911 调试速查见 Linux Android GT911触控调试),直接看 ABS_MT_* 事件序列。

  • 看slot切换是否正确;
  • 看手指抬起时TRACKING_ID是否变成‑1;
  • 观察每一帧结束有没有SYN_REPORT同步事件。

7. 协议混用问题:Type‑A、Type‑B接口不能混用,会造成input子系统解析错乱,现象就是事件混乱、触点数量异常。


相关笔记